#include <stdio.h>
#include <stdlib.h>
#include "proto.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

#define IPSTRSIZE 40

int main()
{
	int sd; // socket fd
	struct sockaddr_in laddr;
	struct sockaddr_in raddr;
	struct msg_st rbuf;
	socklen_t raddr_len;
	char ipstr[IPSTRSIZE];

	// IPV4 DGRAM UDP
	sd = socket(AF_INET, SOCK_DGRAM, 0/* IPPROTO_UDP */);
	if (sd < 0) {
		perror("socket");
		exit(1);
	}

	laddr.sin_family = AF_INET;
	laddr.sin_port = htons(RCVPORT);
	inet_pton(AF_INET, "0.0.0.0", &laddr.sin_addr);
	if (bind(sd, (struct sockaddr *)&laddr, sizeof(laddr)) < 0) {
		perror("bindqqq");
		exit(1);
	}

	/* !!! */
	raddr_len = sizeof(raddr);

	while (1)
	{
		recvfrom(sd, &rbuf, sizeof(rbuf), 0, (struct sockaddr *)&raddr, &raddr_len);
		inet_ntop(AF_INET, &raddr.sin_addr, ipstr, IPSTRSIZE);
		printf("message from %s:%d---\n", ipstr, ntohs(raddr.sin_port));
		printf("name = %s\n", rbuf.name);
		printf("name = %d\n", ntohl(rbuf.math));
		printf("name = %d\n", rbuf.ch);
	}
	close(sd);

	exit(0);
}
